package com.vpx.server.service.system;

import cn.hutool.json.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vpx.server.bean.entity.SqlConfig;
import com.vpx.server.bean.info.system.SqlParam;

import java.util.List;
import java.util.Map;

public interface SqlService {
    /**
     * 查询报表配置详情
     * @param param 请求参数
     * @return
     */
    SqlConfig findSqlConfig(SqlParam param);
    /**
     * 按照唯一编码查询 sql配置对象
     * @param code
     * @return
     */
    SqlConfig findByKeyCode(String code);



    /**
     *
     * @param code
     * @param params
     * @return
     */
    public int execute(String code, Map<String, Object> params);

    /**
     *
     * @param code
     * @return
     */
    public int execute(String code);
    /**
     * 执行数据查询分页
     * @param params 查询条件
     * @return
     */
    Page<Map<String, Object>> findByPage(String code, Map<String, Object> params);

    Page<JSONObject> findPageObj(String code, Map<String, Object> params);

    /**
     * 返回map的数组
     * @param code
     * @param params
     * @return
     */
    List<Map<String, Object>> findListMap(String code, Map<String, Object> params);

    /**
     * 返回单个map对象
     * @param code  唯一编码
     * @param params 请求参数
     * @return
     */
    Map<String,Object> findOneMap(String code,Map<String, Object> params);

    /**
     *按照泛型返回单个数据
     * @param code 唯一编码
     * @param resultType Integer.class Long.class String.class
     * @param params 请求参数
     * @return
     * @param <T>
     */
    public <T> T findOne(String code,Map<String, Object> params, Class<T> resultType);

    /**
     * 按照泛型返回list数组
     * @param code 唯一编码
     * @param resultType Integer.class Long.class String.class
     * @param params 请求参数
     * @return
     * @param <T>
     */
    public <T> List<T> findList(String code,Map<String, Object> params, Class<T> resultType);

    /**
     * 返回单个泛型对象
     * @param code 唯一编码
     * @param resultType
     * @param params 请求参数
     * @return
     * @param <T>
     */
    public <T> T findOneObject(String code,Map<String, Object> params, Class<T> resultType);

    /**
     * 返回泛型对象list集合
     * @param code 唯一编码
     * @param resultType
     * @param params 请求参数
     * @return
     * @param <T>
     */
    public <T> List<T> findListObject(String code,Map<String, Object> params, Class<T> resultType);

    public long getPageCount(String code,Map<String, Object> param);
}
